package com.example.module_mine.ui.fg

import android.graphics.Color

import android.text.Spannable
import android.text.SpannableStringBuilder
import android.text.TextPaint
import android.text.method.LinkMovementMethod
import android.text.style.ClickableSpan

import android.view.View

import android.view.inputmethod.EditorInfo
import androidx.core.content.ContextCompat
import androidx.core.os.bundleOf
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavController
import androidx.navigation.Navigation
import com.alibaba.android.arouter.facade.annotation.Route
import com.example.lib_common.Router
import com.example.lib_common.appContext
import com.example.lib_common.base.BaseActivity
import com.example.lib_common.base.BaseFragment
import com.example.lib_common.clickFlow
import com.example.lib_common.getAttrValue
import com.example.lib_common.throttleFirst
import com.example.lib_common.utils.IntentData
import com.example.lib_common.utils.ToastUtils
import com.example.lib_common.utils.ValidUtil
import com.example.module_mine.R
import com.example.module_mine.databinding.FragmentPhoneLoginBinding
import com.example.module_mine.helper.PopupAgreementHelper
import com.example.module_mine.viewmodel.LoginViewModel
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
//@AndroidEntryPoint
//class PhoneLoginFragment : BaseFragment<LoginViewModel, FragmentPhoneLoginBinding>() {
//
//    private val mViewModel: LoginViewModel by activityViewModels()
//
//    override val mLayoutResId: Int
//        get() = R.layout.fragment_phone_login
//
//    private var mLoginAgreement: Boolean = false
//
//    private lateinit var mNavController: NavController
//    override fun initView() {
//        //设置当前正在显示的fragment
//        mViewModel.setShowingFragmentTag(PhoneLoginFragment::class.simpleName.toString())
//        mNavController = Navigation.findNavController(mBinding.root)
//        initAgreementCheckBox(mLoginAgreement)
//        initAgreementView()
//
//
//    }
//
//
//    private val mPopupAgreement by lazy {
//        PopupAgreementHelper(layoutInflater)
//    }
//
//
//    override fun initListener() {
//
//        mBinding.apply {
//            //验证码点击：性能优化 防抖动
//            btnSmsCode.clickFlow()
//                .throttleFirst(800)
//                .onEach {
//                    checkPhone()
//
//                }.launchIn(lifecycleScope)
//
//            //编辑框点击
//            etPhone.setOnEditorActionListener { _, i, _ ->
//                if (i == EditorInfo.IME_ACTION_DONE) {
//                    checkPhone()
//                }
//                true
//            }
//            //隐私政策
//            vChecked.setOnClickListener {
//                mLoginAgreement = !mLoginAgreement
//                initAgreementCheckBox(mLoginAgreement)
//            }
//
//        }
//
////        addCommonStateListener(mViewModel.stateListener)
////
////        mViewModel.getGoodsInfoLiveData.observe(this) {
////            ToastUtils.showShort(context, GSON.toJson(it[0].name))
////        }
////        mBinding.ivLogo.setOnClickListener {
////            mViewModel.getGoodsInfo()
////        }
//
//
//    }
//
//
//    private fun checkPhone() {
//        val phone = mViewModel.phone.value
//        //是否勾选
//        if (!mLoginAgreement) {
//            (activity as BaseActivity<*, *>?)?.dismissKeyboard()
//            mPopupAgreement.show(mBinding.btnCheck)
//            return
//        }
//
//        if (!ValidUtil.phoneNumberValid(phone)) {
//            ToastUtils.showShort(context, "手机号码长度错误")
//            return
//        }
//
//        //跳转输入验证码页面
////        mViewModel.requestRest = false
//        mNavController.navigate(
//            R.id.action_phoneLoginFragment_to_smsCodeFragment, bundleOf(
//                IntentData.KEY_ACTION_SMS_CODE to SmsCode.LOGIN.type
//            )
//        )
//    }
//
//    override fun initData() {
//        mBinding.viewModel = mViewModel
//    }
//
//    //隐私政策Check背景切换
//    private fun initAgreementCheckBox(checked: Boolean) {
//        if (!checked) {
//            mBinding.btnCheck.background =
//                ContextCompat.getDrawable(appContext, R.mipmap.icon_uncheck)
//        } else {
//            mPopupAgreement.dismiss()
//            mBinding.btnCheck.background =
//                ContextCompat.getDrawable(appContext, R.mipmap.icon_checked)
//        }
//    }
//
//    //用户协议 隐私政策
//    private fun initAgreementView() {
//        val colorMain = getAttrValue(requireContext()!!, R.attr.colorTheme)
//        val userAgreement = "《用户协议》"
//        val privacyPolicy = "《隐私政策》"
//        val content = "阅读并同意$userAgreement 和$privacyPolicy"
//        val spannableStringBuilder = SpannableStringBuilder(content)
//        val userAgreementStart = content.indexOf(userAgreement)
//        val userAgreementEnd = userAgreementStart + userAgreement.length
//
//        val privacyPolicyStart = content.indexOf(privacyPolicy)
//        val privacyPolicyEnd = privacyPolicyStart + privacyPolicy.length
//
//        spannableStringBuilder.setSpan(object : ClickableSpan() {
//            override fun onClick(p0: View) {
////                CommonWebActivity.jumpUserAgreement()
//            }
//
//            override fun updateDrawState(ds: TextPaint) {
//                // ds.color = ContextCompat.getColor(requireContext(), colorMain)
//                ds.isUnderlineText = false
//            }
//
//        }, userAgreementStart, userAgreementEnd, Spannable.SPAN_EXCLUSIVE_INCLUSIVE)
//        spannableStringBuilder.setSpan(object : ClickableSpan() {
//            override fun onClick(p0: View) {
////                CommonWebActivity.jumpPrivacyAgreement()
//            }
//
//            override fun updateDrawState(ds: TextPaint) {
////                ds.color = ContextCompat.getColor(requireContext(), colorMain)
//                ds.isUnderlineText = false
//            }
//
//        }, privacyPolicyStart, privacyPolicyEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
//
//        mBinding.tvAgreement.highlightColor = Color.TRANSPARENT
//        mBinding.tvAgreement.text = spannableStringBuilder
//        mBinding.tvAgreement.movementMethod = LinkMovementMethod.getInstance()
//    }
//
//
//}
class PhoneLoginFragment:BaseFragment<LoginViewModel,FragmentPhoneLoginBinding>() {
    private val mViewModel:LoginViewModel by activityViewModels()
    override val mLayoutResId: Int
        get() = R.layout.fragment_phone_login
    private var mLoginAgreement: Boolean = false
    private lateinit var mNavController: NavController
    override fun initView() {
        //设置当前正在显示的fragment
        mViewModel.setShowingFragmentTag(PhoneLoginFragment::class.simpleName.toString())
        mNavController = Navigation.findNavController(mBinding.root)
        initAgreementCheckBox(mLoginAgreement)
        initAgreementView()
    }


    private val mPopupAgreement by lazy {
        PopupAgreementHelper(layoutInflater)
    }


    override fun initListener() {

        mBinding.apply {
            //验证码点击：性能优化 防抖动
            btnSmsCode.clickFlow()
                .throttleFirst(800)
                .onEach {
                    checkPhone()

                }.launchIn(lifecycleScope)

            //编辑框点击
            etPhone.setOnEditorActionListener { _, i, _ ->
                if (i == EditorInfo.IME_ACTION_DONE) {
                    checkPhone()
                }
                true
            }
            //隐私政策
            vChecked.setOnClickListener {
                mLoginAgreement = !mLoginAgreement
                initAgreementCheckBox(mLoginAgreement)
            }

        }




    }


    private fun checkPhone() {
        val phone = mViewModel.phone.value
        //是否勾选
        if (!mLoginAgreement) {
            (activity as BaseActivity<*, *>?)?.dismissKeyboard()
            mPopupAgreement.show(mBinding.btnCheck)
            return
        }

        if (!ValidUtil.phoneNumberValid(phone)) {
            ToastUtils.showShort(context, "手机号码长度错误")
            return
        }

        //跳转输入验证码页面
//        mViewModel.requestRest = false
        mNavController.navigate(R.id.action_phoneLoginFragment_to_smsCodeFragment, bundleOf(
            IntentData.KEY_ACTION_SMS_CODE to SmsCode.LOGIN.type))
    }

    override fun initData() {
        mBinding.viewModel = mViewModel
    }

    //隐私政策Check背景切换
    private fun initAgreementCheckBox(checked: Boolean) {
        if (!checked) {
            mBinding.btnCheck.background = ContextCompat.getDrawable(appContext, R.mipmap.icon_uncheck)
        } else {
            mPopupAgreement.dismiss()
            mBinding.btnCheck.background = ContextCompat.getDrawable(appContext, R.mipmap.icon_checked)
        }
    }

    //用户协议 隐私政策
    private fun initAgreementView() {
        val colorMain = getAttrValue(requireContext()!!, R.attr.colorTheme)
        val userAgreement = "《用户协议》"
        val privacyPolicy = "《隐私政策》"
        val content = "阅读并同意$userAgreement 和$privacyPolicy"
        val spannableStringBuilder = SpannableStringBuilder(content)
        val userAgreementStart = content.indexOf(userAgreement)
        val userAgreementEnd = userAgreementStart + userAgreement.length

        val privacyPolicyStart = content.indexOf(privacyPolicy)
        val privacyPolicyEnd = privacyPolicyStart + privacyPolicy.length

        spannableStringBuilder.setSpan(object : ClickableSpan() {
            override fun onClick(p0: View) {
//                CommonWebActivity.jumpUserAgreement()
            }

            override fun updateDrawState(ds: TextPaint) {
                ds.color = ContextCompat.getColor(requireContext(), colorMain)
                ds.isUnderlineText = false
            }

        }, userAgreementStart, userAgreementEnd, Spannable.SPAN_EXCLUSIVE_INCLUSIVE)
        spannableStringBuilder.setSpan(object : ClickableSpan() {
            override fun onClick(p0: View) {
//                CommonWebActivity.jumpPrivacyAgreement()
            }

            override fun updateDrawState(ds: TextPaint) {
                ds.color = ContextCompat.getColor(requireContext(), colorMain)
                ds.isUnderlineText = false
            }

        }, privacyPolicyStart, privacyPolicyEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)

        mBinding.tvAgreement.highlightColor = Color.TRANSPARENT
        mBinding.tvAgreement.text = spannableStringBuilder
        mBinding.tvAgreement.movementMethod = LinkMovementMethod.getInstance()
    }









}